package cn.wei.reallyEnjoy.utils;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 *
 * 要是直接把listview嵌进scrollview中。listview的高度是固定的不能进行滑动
 * scrollView中的ListView在计算高度时跳过了measureHeightOfChildren方法的，
 * 只计算了第一个item的高度，因而只会显示一条数据的高度。
 * 解决办法很多都是自定义一个ListView 继承Listview，然后重写onMeasure方法。
 *
 * 作者：风二叽
 * 链接：https://www.jianshu.com/p/b09e324ef8a7
 * 来源：简书
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        //获取ListView对应的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) { //listAdapter.getCount()返回数据项的数目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0); //计算子项View 的宽高
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();//统计所有子项的总高度
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))+100;//+100,最后一个item内容被挡住了


        //listView.getDividerHeight()获取子项间分隔符占用的高度

        //params.height最后得到整个ListView完整显示需要的高度
        listView.setLayoutParams(params);
    }
}